package com.bravo.rxlib;

/**
 * Created by bravo.lee on 2017/10/8.
 */

public class OperatorMap<T, R> implements Operator<T, R> {

    private Func<? super T,? extends R> func;

    /**
     *
     * @param func MainActivity 调用map方法 创建的内部类Func
     */
    public OperatorMap(Func<? super T,? extends R> func) {
        this.func = func;
    }

    /**
     * 将MainActivity subscriable()创建的 内部内 和 调用map方法 创建的内部类Func 对象传入 MapSubscriable
     * @param subscriable MainActivity 调用map方法后，再调用subscriable()方法时，new 的内部类 Subscriable。
     * @return  MapSubscriable 实例对象。
     */
    @Override
    public Subscriable<? super R> call(Subscriable<? super T> subscriable) {
        return new MapSubscriable(subscriable,func);
    }

   public class MapSubscriable<T> implements Subscriable<T> {
       private Subscriable<? super R> subscriable;
       private Func<? super T, ? extends R> func;

       public MapSubscriable(Subscriable<? super R> subscriable, Func<? super T,? extends R> func) {
           this.subscriable = subscriable;
           this.func = func;
       }

       /**
        *
        * @param t  需要转换的参数。
        */
       @Override
        public void onNext(T t) {
           /**
            *  MainActivity 调用map方法 创建的内部类Func
            *  调用call方法。回调到MainActivity。返回转换的结果。
            */
           R r = func.call(t);

           /**
            * MainActivity 调用subscriable()方法时，new 的内部类 Subscriable
            * 再调用onNext()方法。
            * 将转换完的r返回。
            */
           subscriable.onNext(r);
       }
    }
}
